const https = require('https');// curl -k https://localhost:8000/
const SQLHelper =  require('./SQLHelper');
const { formatTime } = require('./util')
///雪花算法生成ID
const Snowflake = require('./snowflake')

const multer = require('multer')
// const upload = multer({ dest:'uploads/'})
const storage = multer.diskStorage({
    destination:'./uploads',
    ///获取uploads文件里面的图片
    filename: function (req, file, cb) {
        ///获取图片类型
        let fileType = file.originalname.split('.')    //从.裁剪内容
        fileType = fileType[fileType.length - 1]
        cb(null, Snowflake() + '.' + fileType)
        // console.log(file)
    }
})
const upload = multer({storage: storage })

module.exports = function(app){
//登录拦截中间件
function loginRouter(req,res,next){
    if(req.method.toUpperCase() == 'OPTIONS'){
        next()
        return;
    }
    let token = req.headers.token
    // console.log(token)
    if(token){
        SQLHelper(`select * from session where id = ${token} and state = 1`).then(ret => {
            if(ret.length){
                let session = ret[0]
                ///2H
                // console.log(ret)
                if(new Date().getTime() - session.createTime < 2 * 60 * 60 * 1000){
                    req.session = {
                        userId:session.userId,
                        userName:session.userName
                    }
                    next()
                }else{
                    res.status(400).send({errorMsg:'登录超时'})
                }
            }else{
                res.status(400).send({errorMsg:'当前用户未登录'})
            }
        })
    }else{
        res.status(400).send({errorMsg:'缺少token,请先进行登录'})
    }
}
///让初登录以外的所有小程序接口都要先验证登录
app.use('/admin',loginRouter)



///文件上传
app.post('/upload',upload.single('file'),(req,res) => {
    // console.log(req.file)
    res.send(req.file)
})

////管理员后台登陆
app.post('/login', (req, res) => {
    let userName = req.body.userName
    let passWord = req.body.passWord
    if(userName && passWord){
        SQLHelper(`
            select * from user where userName = '${userName}'
        `).then(users => {
            if(users.length){///正常登录
                let user =users[0]
                if(passWord == user.passWord){
                    let token = Snowflake()
                    //缓存到token到session表
                    SQLHelper(`
                    INSERT INTO session(id,userId,userName,inTime,createTime,platform) 
                    VALUES ('${token}','${user._id}','${user.nickName}','${formatTime(new Date())}','${new Date().getTime()}','admin')
                    `).then(ret => {
                        res.send({
                            nickName:user.nickName,
                            token,
                            avatarUrl:user.photo,
                            _id:user._id
                        })
                    })
                }else{
                    res.send({errorMsg:'密码出错'})
                }
            }else{
                res.send({errorMsg:'当前用户不存在'})
            }
        })
    }else{
        res.send({errorMsg:'用户名和密码不能为空'})
    }
})
///退出登录
app.get('/admin/logout',(req,res) => {
    SQLHelper(`
    UPDATE session set outTime = '${formatTime(new Date())}',state = 0
    WHERE id = '${req.headers.token}'
    `).then(ret => {
        res.send({msg:'退出登录成功'})
    })
})

//修改密码
app.post('/admin/changePassWord',(req,res) => {
    let userId = req.session.userId
    let passWord = req.body.passWord
    let newPassWord = req.body.newPassWord
    if(passWord && newPassWord){
        ///查询用户
        SQLHelper(`
        select passWord from user where _id = '${userId}'`).then(users => {
            let user = users[0]
            //比对原密码
            if(user.passWord == passWord){
                //修改密码
                SQLHelper(`update user set passWord = '${newPassWord}' where _id  = '${userId}' `).then(ret => {
                    res.send({msg:'修改密码成功'})
                })
            }else{
                res.send({errorMsg:'原密码错误'})
            }
        })
    }else(
        res.send({errorMsg:'原密码和新密码不能为空'})
    )
})

///分页获取首页项目列表
///pageSize 每页大小 默认10 
/// pageNum 当前页 默认1
///type 类型 非必填 banner,轮播图 category,分类 recommend,为了推荐 不填搜索全部
app.get('/admin/index',(req,res) => {
    let pageSize = req.query.pageSize || 10
    let pageNum = req.query.pageNum || 1
    let offset = (pageNum - 1) * pageSize
    let title = req.query.title
    let type = req.query.type
    let price = req.query.price
    let whereSql = `from index_region where state = 1`
    ///按类型查询
    if(type) whereSql += ` and type = '${type}'`
    ///按标题关键字搜索
    if(title) whereSql += ` and title like "%${title}%"`
    SQLHelper(`
        select count(*) as total ${whereSql};
        select * ${whereSql}
        limit ${pageSize} offset ${offset}
    `).then(ret => {
        res.send({
            total:ret[0][0].total,
            rows:ret[1]
        })          
    })
})

///新增首页项目
///img 图片地址 必填
///url 连接地址 非必填
///title 标题 轮播图不填，其他必填
///status 是否启用 非必填 ，1 启用 ，0 停用
///type 类型 非必填 banner(默认),轮播图 category,分类 recommend,为了推荐
app.post('/admin/index',(req,res) => {
    let img = req.body.img,url = req.body.url,status = req.body.status,price = req.body.price
    let type = req.body.type || 'banner',title = req.body.title
    if(type != 'banner' && !title){
        res.send({errorMsg:'标题不能为空'})
        return
    }
    if(status !== 1) status = 0 //默认启用
    if(img){
        let createTime = new Date().getTime()
        SQLHelper(`
            INSERT INTO index_region(title,img,url,status,state,createTime,unitId,type,price) 
            VALUES ('${title}','${img}','${url}','${status}',1,${createTime},'juzao','${type}','${price}')
        `).then(ret => {
            res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:'新增数据失败'})
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

//修改首页项目
///indexId 主码_id 必填
app.put('/admin/index',(req,res) => {   
    if(req.body.indexId){
        //需要修改的项
        let updateTime = new Date().getTime()
        let updateKey = ['img','url','title','status','price']
        let updateValues = [`updateTime=${updateTime}`]
        for(let i = 0;i < updateKey.length; i ++){
            let key = updateKey[i],value = req.body[key]
            if(value !== undefined)  updateValues.push(`${key} = '${value}'`)  ///判断哪些需要修改
        }
        SQLHelper(`update index_region set ${updateValues.join(',')} where _id = ${req.body.indexId}`).then(ret => {
            res.send(ret)
        })
    }else{
        res.send({errorMsg:'传入参数错误'})
    }
})

//删除地址  逻辑删除
///indexId 主码_id 必填
app.delete('/admin/index',(req,res) => {
    let indexId = req.query.indexId
    if(indexId){       
        SQLHelper(`
        UPDATE index_region 
        set state = 0
        WHERE _id = ${indexId}
        `).then(ret => {
            res.send(ret)
        })      
    }else{
        res.send({errorMsg:'是不是你错了'})
    }
})

}
